#include <iostream>
using namespace std;

// 方案二将构造函数私有化。并将拷贝构造函数私有化或者删除。
class HeapOnly
{
public:
	static HeapOnly* CreateObj()
	{
		return new HeapOnly();
	}
private:
	HeapOnly() {}; // 私有化构造函数
	
	// C++98:只声明，不实现。并声明成私有
	HeapOnly(const HeapOnly&);
	
	// C++11：(添加=delete,访问限制符都可以)
	//HeapOnly(const HeapOnly&) = delete;
};

int main()
{
	HeapOnly* php = HeapOnly::CreateObj();
	delete php;
	//HeapOnly copy(*php);
	
	// err,不能在栈上创建对象
	// HeapOnly hp; 
	return 0;
}
